package cn.edu.bjut.my.thinkinjava._2019_10_11_StatisticFiles;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class StaticsticFiles {

    /**
     * 分析以下需求，并用代码实现 键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中,每种类型的文件及个数
     * 注意:用文件类型(后缀名,不包含.,"java","txt")作为key,用个数作为value,放入到map集合中,
     * 并按照如下格式打印map集合中的内容
     *
     * docx类型的文件有 1 个 java类型的文件有 24 个 txt类型的文件有 10 个 //...
     */
    public static void main(String[] args) {
        System.out.println("输入一个文件路径：");
        Scanner sc = new Scanner(System.in);
        String Dir = sc.nextLine();
        File f = new File(Dir);

        // 新建一个Map集合
        Map<String, Integer> map = new HashMap<String, Integer>();
        getFileTypeCount(f, map);

        //遍历map
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+" = "+value);
        }
    }

    public static void getFileTypeCount(File dir, Map<String, Integer> map) {
        // 获取dir目录下的所有文件和文件夹
        File[] files = dir.listFiles();

        // 遍历对象数组
        for (File file : files) {
            if (file.isFile()) {
                int index = file.getName().lastIndexOf(".");
                String str = file.getName().substring(index + 1);
                map.put(str, map.get(str) == null ? 1 : map.get(str) + 1);
            } else if (file.isDirectory()) {
                getFileTypeCount(file, map);
            }
        }
    }
}
